
package com.example.langchaindemo1.controller;

import com.example.langchaindemo1.domain.Memory;
import com.example.langchaindemo1.service.MemoryService;
import dev.langchain4j.model.chat.ChatLanguageModel;
import dev.langchain4j.model.openai.OpenAiChatModel;
import jakarta.annotation.Resource;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.RestController;

/**
 * @author xuxiang
 * @since 1.0
 * @description 控制器类，用于处理与大模型的对话请求
 */
@RestController
@RequiredArgsConstructor
@RequestMapping("/api")
public class HelloController {

    // 注入MemoryService实例，用于操作Memory对象
    @Resource
    private MemoryService memoryService;

    /**
     * 处理GET请求，与大模型进行对话
     * @param userMessage 请求中的消息参数，将被发送给大模型
     * @return 大模型的响应字符串
     */
    @GetMapping("/first")
    public String hello(@RequestParam("userMessage") String userMessage) {
        // 创建OpenAiChatModel实例，配置其基础URL、API密钥和模型名称
        ChatLanguageModel model = OpenAiChatModel.builder().baseUrl("https://api.deepseek.com/v1")
                .apiKey("sk-04c56c87e1794d1b94333d5a86bd36c9")
                .modelName("deepseek-chat")
                .build();
        // 使用配置好的模型生成响应
        String generate = model.generate(userMessage);
        // 创建Memory对象，将用户消息和模型响应存储起来
        Memory memory = new Memory();
        memory.setUserMessage(userMessage);
        memory.setResponse(generate);
        // 调用MemoryService的save方法，将Memory对象保存到数据库
        memoryService.save(memory);
        // 返回大模型的响应字符串给客户端
        return generate;
    }
}
